
/* -----------------
* brief 
* 1. this is code gen by tools 
* 2. mvc code are driver by the model defined with the same filename,
	 for example:
	 there is a Xmodel struct define in xmodel.go file, after the script run (lego model-mvc module_name xmodel)
     it will auto create the code under the module's path
	 m --> xmodel.go
	 v --> view
	 c --> xmodel_ctrl 
* 3. you should modify this code if it doesn't satisfy your purpose   
*/

package controller

import (
	"github.com/mjiulee/lego"
	"github.com/mjiulee/lego/utils"
	"github.com/valyala/fasthttp"

	. "saas_sys_base/modules/user/models"
	. "saas_sys_base/modules/user/service"
)

type TenantWxUserCtrl struct {
	service  TenantWxUserService
}


func init () {
	vc:= new(TenantWxUserCtrl)
	_ctrlList = append(_ctrlList,vc)
}

func (vc*TenantWxUserCtrl)CtrlInfo() string {
	return "TenantWxUserCtrl"
}

func (vc*TenantWxUserCtrl)RoutInit() {
	// 列表页面
	lego.GET("/admin/TenantWxUser/listpage", vc.ListPage, lego.LEGO_SESSION_TYPE_ADMIN,false)
	lego.GET("/admin/TenantWxUser/listjson", vc.ListJson, lego.LEGO_SESSION_TYPE_ADMIN,false)
    // 编辑页面
    lego.GET("/admin/TenantWxUser/editpage", vc.GetEditPage, lego.LEGO_SESSION_TYPE_ADMIN,false)
    lego.POST("/admin/TenantWxUser/editpage", vc.PostEditPage,lego.LEGO_SESSION_TYPE_ADMIN, false)
    // 删除
    lego.POST("/admin/TenantWxUser/del", vc.DelRecode, lego.LEGO_SESSION_TYPE_ADMIN,false)
}

/* 列表接口
* params:
  ---
*/
func (vc *TenantWxUserCtrl) ListJson(ctx *fasthttp.RequestCtx) {
	ctxExt := lego.RequestCtxExtent{ctx}
	response := make(map[string]interface{})
	code := 0
	msg := ""
	for {
        // 表单校验
        type ReqParams struct {
            Keyword string // 关键字查询
            Page    int    `vd:"$>=0"` // 分页
            PSize   int    `vd:"$>0"`  // 分页大小
        }
        req := ReqParams{
            Keyword: string(ctxExt.Peek("keyword")),
            Page:    utils.BytesToInt(ctxExt.Peek("page")),
            PSize:   utils.BytesToInt(ctxExt.Peek("limit")),
        }
        if err := lego.Validate(req); err != nil {
            code = 100
            msg = err.Error()
            break
        }

        // 业务查询
        if list, total, err := vc.service.ListTenantWxUser(req.Keyword,req.Page, req.PSize); err != nil {
			lego.LogError(err)
		} else {
			response["count"] = total
			response["data"] = list
		}
		break
	}

	response["code"] = code
	response["msg"] = msg
	ctxExt.JSON(200, response)
	return
}

/* 添加数据记录
* params:
  ---
*/
func (vc *TenantWxUserCtrl) ListPage(ctx *fasthttp.RequestCtx) {
	ctxExt := lego.RequestCtxExtent{ctx}
	data := make(map[string]interface{})
	for {
		break
	}
	ctxExt.HTML("user/view/TenantWxUser/list.html", data)
	return
}

/* 添加数据记录
* params:
  ---
*/
func (vc *TenantWxUserCtrl) GetEditPage(ctx *fasthttp.RequestCtx) {
	ctxExt := lego.RequestCtxExtent{ctx}
	data := make(map[string]interface{})
	for {
        type ReqParams struct {
            Id int64 // 记录id，为空则新建，否则为编辑
        }
        req := ReqParams{
            Id: utils.BytesToInt64(ctxExt.Peek("id")),
        }
        if err := lego.Validate(req); err != nil {
            break
        }
		target := vc.service.GetTenantWxUserById(req.Id)
		data["detail"] = target
		break
	}
	ctxExt.HTML("user/view/TenantWxUser/edit.html", data)
	return
}


/* 数据编辑
* params:
  ---
*/
func (vc *TenantWxUserCtrl) PostEditPage(ctx *fasthttp.RequestCtx) {
    ctxExt := lego.RequestCtxExtent{ctx}
    response := make(map[string]interface{})
    data := make(map[string]interface{})

    code := 0
    msg := ""

    for {
        // 表单校验
        type ReqParams struct {
            	WxUser
        }

        req := ReqParams{
			WxUser {
				Id: 	utils.BytesToInt64(ctxExt.Peek("id")),
				IfDel: 	utils.BytesToInt(ctxExt.Peek("if_del")),
				Cdate: 	string(ctxExt.Peek("cdate")),
				Udate: 	string(ctxExt.Peek("udate")),
				RegShareid: 	utils.BytesToInt64(ctxExt.Peek("reg_shareid")),
				OpenId: 	string(ctxExt.Peek("open_id")),
				UnionId: 	string(ctxExt.Peek("union_id")),
				NickName: 	string(ctxExt.Peek("nick_name")),
				Gender: 	utils.BytesToInt(ctxExt.Peek("gender")),
				City: 	string(ctxExt.Peek("city")),
				Province: 	string(ctxExt.Peek("province")),
				Country: 	string(ctxExt.Peek("country")),
				AvatarUrl: 	string(ctxExt.Peek("avatar_url")),
				RealName: 	string(ctxExt.Peek("real_name")),
				PhoneNumber:	string(ctxExt.Peek("phone_number")),
				//GotRegCoupon: 	utils.BytesToInt(ctxExt.Peek("got_reg_coupon")),
			},
        }

        if err := lego.Validate(req); err != nil {
            code = 100
            msg = err.Error()
            break
        }

        // 业务处理
        recode := vc.service.GetTenantWxUserById(req.Id)
        if recode == nil {
            // 新建
            recode := new(TenantWxUser)
            			recode.WxUser= req.WxUser

            if false == vc.service.SaveTenantWxUser(recode) {
                code = 100
                msg = "false"
                break
            }
        } else {
            			recode.WxUser= req.WxUser

            if false == vc.service.UpdateTenantWxUser(recode) {
                code = 100
                msg = "false"
                break
            }
        }
        break
    }
    response["code"] = code
    response["msg"] = msg
    response["data"] = data
    ctxExt.JSON(200, response)
    return
}

/* 删除数据记录
* params:
  ---
*/
func (vc *TenantWxUserCtrl) DelRecode(ctx *fasthttp.RequestCtx) {
	ctxExt := lego.RequestCtxExtent{ctx}
    response := make(map[string]interface{})
    data := make(map[string]interface{})

    code := 0
    msg := ""
    for{
        // 表单校验
        type ReqParams struct {
            Id int64 `vd:"$>0"` // 记录id
        }
        req := ReqParams{
            Id: utils.BytesToInt64(ctxExt.Peek("id")),
        }
        if err := lego.Validate(req); err != nil {
            break
        }
        // 业务删除
        target := vc.service.GetTenantWxUserById(req.Id)
        if target == nil {
            code = 100
            msg = "记录不存在"
            break
        }

        if false == vc.service.DelTenantWxUserById(target.Id) {
            code = 100
            msg = "操作失败"
            break
        }
        break
    }

	response["code"] = code
    response["msg"] = msg
    response["data"] = data
    ctxExt.JSON(200, response)
	return
}